﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Text.RegularExpressions;

namespace LI4
{
    public partial class editarAnuncio : System.Web.UI.Page
    {
        

        protected void Page_Load(object sender, EventArgs e)
        {
            if (anunciosLB.Items.Count < 1)
            {
                anunciosLB.Items.Clear();
                Data.Anuncio anunciop = new Data.Anuncio();
                ArrayList anuncios = new ArrayList();
                anuncios = anunciop.getAnuncios(Program.Login.Username);

                foreach (Business.Anuncio anuncio in anuncios)
                    anunciosLB.Items.Add(anuncio.CodAnuncio.ToString() + "-" + anuncio.Descricao);
                map_canvas.Visible = false;
               
            }

            
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            
            
                if (anunciosLB.SelectedItem == null)
                    Response.Write("<script>alert('Seleccione um anuncio')</script>");
                else
                {
                    distritoLB.Items.Clear();
                    localidadeLB.Items.Clear();
                    areaLB.Items.Clear();

                    Data.Localidade localidade = new Data.Localidade();
                    Data.Distrito distrito = new Data.Distrito();
                    Data.Area area = new Data.Area();

                    Program.distritos = distrito.getDistritos();
                    Program.areas = area.getAreas();

                    foreach (Business.Distrito dist in Program.distritos)
                        distritoLB.Items.Add(dist.Nome);



                    foreach (Business.Area areap in Program.areas)
                        areaLB.Items.Add(areap.Nome);




                    char[] delimiterChars = { '-' };
                    string[] palavra = anunciosLB.SelectedItem.Text.Split(delimiterChars);
                    int index = Int32.Parse(palavra[0]);
                    Data.Anuncio anunciop = new Data.Anuncio();
                    Business.Anuncio anuncio = new Business.Anuncio(anunciop.getAnuncio(index));

                    click_lat.Value = anuncio.Latitude;
                    click_long.Value = anuncio.Longitude;

                    areaLB.SelectedValue = anuncio.Area.Nome;


                    distritoLB.SelectedValue = anuncio.Localidade.Distrito.Nome;



                    ArrayList localidades = new ArrayList();
                    localidades = localidade.getLocalidadesDistrito(anuncio.Localidade.Distrito.CodDistrito);

                    foreach (Business.Localidade localp in localidades)
                        localidadeLB.Items.Add(localp.Nome);

                    localidadeLB.SelectedValue = anuncio.Localidade.Nome;
                    descricaoTB.Text = anuncio.Descricao;
                    codpostal1.Text = anuncio.CodPostal.Substring(0, 4);
                    codpostal2.Text = anuncio.CodPostal.Substring(4, 3);
                    ruaTB.Text = anuncio.Rua;
                    map_canvas.Visible = true;
                }
            


        }

        protected void Button3_Click(object sender, EventArgs e)
        {
            char[] delimiterChars = { '-' };
            string[] palavra = anunciosLB.SelectedItem.Text.Split(delimiterChars);
            int index = Int32.Parse(palavra[0]);
            string arean = areaLB.SelectedItem.Text;
            string localidaden = localidadeLB.SelectedItem.Text;
            string distriton = distritoLB.SelectedItem.Text;
            string descricaot = descricaoTB.Text;
            string ruat = ruaTB.Text;
            string codpostalt1 = codpostal1.Text;
            string codpostalt2 = codpostal2.Text;
            string latitute = click_lat.Value;
            string longitude = click_long.Value;
            Data.Anuncio anunciop = new Data.Anuncio();
            Business.Anuncio anuncio = new Business.Anuncio(anunciop.getAnuncio(index));
            string codpostaltotal = codpostalt1 + codpostalt2;
            int cod = 1;

            try
            {
                int codP = Int32.Parse(codpostaltotal);
            }
            catch
            {
                cod = 0;
            }
            Regex nomereg = new Regex(@"[a-zA-Z0-9àáéóúãâÂÁÀÉêÊÍÓçÇÃÓõÕôÚ.,:-_]+([ a-zA-Z0-9àáéêÊóúãâÂÁÀÉÍÓçÇÃÓÚõÕô.,:-_]+)*");
            
            if (!nomereg.IsMatch(descricaot)) Response.Write("<script>alert('Campo Descrição inválido')</script>");
            else if(!nomereg.IsMatch(ruat)) Response.Write("<script>alert('Campo Morada inválido')</script>");
            else if(cod == 0) Response.Write("<script>alert('Campo Código Postal inválido')</script>");
            else
            {
                
                Business.Area area = new Business.Area(new Data.Area().getAreaNome(arean));
                Business.Localidade localidade = new Business.Localidade(new Data.Localidade().getLocalidadeNome(localidaden));
                //Business.Distrito distrito = new Business.Distrito(new 

                Business.Anuncio novoAnuncio = new Business.Anuncio(anuncio.CodAnuncio, area, Program.Login.Username, descricaot, ruat, localidade, codpostaltotal, latitute, longitude);
                Data.Anuncio novoAnuncio1 = new Data.Anuncio();
                novoAnuncio1.update(novoAnuncio);
                anunciosLB.Items.Clear();

                areaLB.Items.Clear();
                distritoLB.Items.Clear();
                localidadeLB.Items.Clear();
                descricaoTB.Text = "";
                ruaTB.Text = "";
                codpostal1.Text = "";
                codpostal2.Text = "";
                Response.Write("<script>alert('Anuncio Actualizado')</script>");
                
            }

        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            char[] delimiterChars = { '-' };
            string[] palavra = anunciosLB.SelectedItem.Text.Split(delimiterChars);
            int index = Int32.Parse(palavra[0]);
            Data.Anuncio anunciop = new Data.Anuncio();
            Business.Anuncio anuncio = new Business.Anuncio(anunciop.getAnuncio(index));

            anunciop.remover(anuncio);

            Response.Write("<script>alert('Anuncio removido')</script>");

            anunciosLB.Items.Clear();

            areaLB.Items.Clear();
            distritoLB.Items.Clear();
            localidadeLB.Items.Clear();
            descricaoTB.Text = "";
            ruaTB.Text = "";
            codpostal1.Text = "";
            codpostal2.Text = "";

        }

        protected void distritoLB_SelectedIndexChanged(object sender, EventArgs e)
        {
            Data.Localidade localidade = new Data.Localidade();
            Data.Distrito distrito = new Data.Distrito();

            Program.localidades = localidade.getLocalidades();
            Program.distritos = distrito.getDistritos();

            localidadeLB.Items.Clear();

            Program.localidades = localidade.getLocalidades();
            Program.distritos = distrito.getDistritos();

            int codDistr = 0;
            string distr = distritoLB.Text;
            foreach (Business.Distrito dist in Program.distritos)
                if (dist.Nome.Equals(distr)) codDistr = dist.CodDistrito;

            foreach (Business.Localidade local in Program.localidades)
            {
                if (local.Distrito.CodDistrito == codDistr) localidadeLB.Items.Add(local.Nome);
            }
            if (localidadeLB.Items.Count > 0) localidadeLB.SelectedIndex = 0;
        }
    }
}
